package com.briup.day12;


import java.util.Scanner;

public class ExceptionTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 模拟实现登录流程业务
        System.out.println("请输入用户名:");
        String username = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();
        User user = null;
        try {
            user = login(username, password);
        } catch (RuntimeException e) {
//            System.out.println("出现异常:" + e.getMessage());
            e.printStackTrace();
        }
        System.out.println("当前登录的用户为:" + user);
    }

    // 异常中断程序运行，中断的是异常所在方法的运行；
    // 但是因为异常是会传递的，当某一个方法调用的方法出现了异常，
    // 并且该异常没有解决，那么异常是会传递到方法调用者上的，
    // 如main方法中调用了login方法，login方法出现了异常，
    // 并且异常没有解决，那么login方法会中断执行，
    // 并且会将异常传递到main方法中，同时中断执行调用login方法及其之后代码的执行
    private static User login(String username, String password) {
        // 校验用户名和密码是否可用
        // trim()方法用于给字符串去除有效字符前后的空格，
        // 如"   a b   " ==去空后==> "a b"
        if (username == null || username.isBlank()) {
            // 用户名为空格，不可用，
            // 如何告知用户其输入的用户名不可用，并且中断程序的运行
            // 抛出异常，通过throw关键字将指定异常对象抛出
            throw new RuntimeException("用户名为空");
//            return "用户名不能为空";
        }
        if (password == null || password.isBlank()) {
            throw new RuntimeException("用户名为空");
        }
        // 在经过上述两个操作之后，才能确定用户名和密码是有效的
        if (!username.equals("admin") || !password.equals("admin")) {
            throw new RuntimeException("用户名或密码有误，请重新输入");
        }

        return new User(1, "admin", "admin");
    }

    static record User(int id, String username, String password) {

    }
}
